package com.xique.park.service.service.impl;

import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xique.common.core.web.domain.PageResult;
import com.xique.park.bean.domain.EtcObuRec;
import com.xique.park.bean.request.web.etcObu.EtcObuRequest;
import com.xique.park.bean.vo.web.etcObu.EtcObuVo;
import com.xique.park.mapper.EtcObuRecMapper;
import com.xique.park.service.service.IEtcObuRecService;
import io.seata.common.util.CollectionUtils;
import io.seata.common.util.StringUtils;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * ETC的OBU识别记录服务实现
 *
 * @author wld
 * @date 2022/3/16 10:53
 */
@RequiredArgsConstructor
@Service
public class EtcObuRecServiceImpl extends ServiceImpl<EtcObuRecMapper, EtcObuRec> implements IEtcObuRecService {

    private final EtcObuRecMapper etcObuRecMapper;

    @Override
    public PageResult selectPageList(EtcObuRequest etcObuRequest) {
        Page<EtcObuVo> page = new Page<>();
        page.setCurrent(etcObuRequest.getPageNum());
        page.setSize(etcObuRequest.getPageSize());
        IPage<EtcObuVo> pageResult = etcObuRecMapper.selectPageList(page, etcObuRequest);
        List<EtcObuVo> etcObuVoList = pageResult.getRecords();
        handleEtcObu(etcObuVoList);
        long totalPages = pageResult.getPages();
        long totalSize = pageResult.getTotal();

        return PageResult.builder()
                .pageNum(etcObuRequest.getPageNum())
                .pageSize(etcObuRequest.getPageSize())
                .totalPages(totalPages)
                .totalSize(totalSize)
                .list(etcObuVoList)
                .build();
    }

    private void handleEtcObu(List<EtcObuVo> etcObuVoList) {
        if (CollectionUtils.isNotEmpty(etcObuVoList)) {
            etcObuVoList.forEach(etcObuVo -> {
                String info = etcObuVo.getInfo();
                if (StringUtils.isNotEmpty(info)) {
                    EtcObuVo jsonObj = JSON.parseObject(info, EtcObuVo.class);
                    if (jsonObj != null) {
                        etcObuVo.setEtcStatus(jsonObj.getEtcStatus());
                        etcObuVo.setTime(jsonObj.getTime());
                        etcObuVo.setEtcPay(jsonObj.getEtcPay());
                        etcObuVo.setEtcCode(jsonObj.getEtcCode());
                        etcObuVo.setEtcMsg(jsonObj.getEtcMsg());
                        etcObuVo.setEtcTradeNo(jsonObj.getEtcTradeNo());
                    }
                }
            });
        }
    }
}
